#include <stdio.h>
#include <getopt.h>
#include "long_opt.h"


// 短参数
void short_opt(int argc, char *argv[]) {
    int opt;
    // 定义参数格式
    /*
     * a:: -> 表示可选参数 可有可无（参数格式：-a100 或者 -a 或 不写参数； 注意a和100中间不能有空格否则报错）其他格式都错
     * b:和c: 使用该选项必须有参数（格式： -b 200或者 -b200,但-b=100错）
     * d 表示没有参数 （格式： -d 即可，不加参数）
     *
     * getopt: 是用来解析命令行选项参数的，但是只能解析短选项: -d 100,不能解析长选项：--prefix
     * 参数： argc：main()函数传递过来的参数的个数  argv：main()函数传递过来的参数的字符串指针数组 optstring：选项字符串，告知 getopt()可以处理哪个选项以及哪个选项需要参数
     * 返回： 如果选项成功找到，返回选项字母；
     * 如果所有命令行选项都解析完毕，返回 -1；
     * 如果遇到选项字符不在 optstring 中，返回字符 '?'；
     * 如果遇到丢失参数，那么返回值依赖于 optstring 中第一个字符，
     * 如果第一个字符是 ':' 则返回':'，否则返回'?'并提示出错误信息。
     * */
    char *string = "a::b:c:d";
    while ((opt = getopt(argc, argv, string)) != -1) {
        printf("opt = %c\t\t", opt);
        printf("optarg = %s\t\t", optarg);
        printf("optind = %d\t\t", optind);
        printf("argv[optind] = %s\n", argv[optind]);
    }
}

int main(int argc, char *argv[]) {
    short_opt(argc, argv);
    long_opt(argc, argv);
    return 0;
}
